package com.petecat.interchan.base.project.service;

import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.springframework.http.ResponseEntity;

import com.petecat.interchan.base.project.entity.BsProject;
import com.petecat.interchan.base.project.entity.EsServer;
import com.petecat.interchan.base.project.entity.EsServerHistory;
import com.petecat.interchan.base.project.entity.EsServerSoftWareDTO;
import com.petecat.interchan.base.project.entity.EsSoftPercent;
import com.petecat.interchan.base.project.entity.EsSofts;
import com.petecat.interchan.base.project.entity.ServerInfoDTO;
import com.petecat.interchan.core.service.BaseService;
import com.petecat.interchan.protocol.base.project.dto.BsProjectAddDTO;
import com.petecat.interchan.protocol.base.project.dto.BsProjectQryDTO;
import com.petecat.interchan.protocol.base.project.dto.BsProjectUpdDTO;
import com.petecat.interchan.protocol.base.project.vo.BsProjectQryVO;
import com.petecat.interchan.protocol.base.project.vo.CompanySelectVO;
import com.petecat.interchan.protocol.base.project.vo.ProjectTreeVO;
import com.petecat.interchan.protocol.data.PageVO;

public interface IProjectService extends BaseService<BsProject, String>{
	
	/**
	 * 分页查询项目信息
	 * @param projectQryDTO
	 * @return
	 */
	PageVO<BsProjectQryVO> queryProjectByPage(BsProjectQryDTO projectQryDTO);
	
	/**
	 * 修改状态
	 * @param projectId
	 * @param state
	 */
	void updateProjectById(String projectId, String state);
	
	/**
	 * 修改项目基本信息
	 * @param bsProjectUpdDTO
	 * @param userId
	 */
	void modifyProjectById(BsProjectUpdDTO bsProjectUpdDTO, String userId);
	
	/**
	 * 新增项目基本信息
	 * @param bsProjectAddDTO
	 * @param userId
	 */
	void saveProject(BsProjectAddDTO bsProjectAddDTO, String userId);
	
	/**
	 * 下拉查询启用项目信息
	 * @param string 
	 * @return
	 */
	List<CompanySelectVO> queryProjectSelect(String user);
	
	/**
	 * 通过ID刷新TOKEN
	 * @param projectId
	 * @param userId 
	 */
	void updProjectTokenById(String projectId,String projectToken,String userId);
	
	/**
	 * 查询项目下拉树
	 * @param projectQryDTO 
	 * @param userId
	 * @return
	 */
	PageVO<ProjectTreeVO> queryProjectByTree(BsProjectQryDTO projectQryDTO, String userId);
	
	/**
	 * 删除项目基本信息
	 * @param projectId
	 */
	void deleteProjectById(String projectId);
	
	/**
	 * 通过Token查询项目所在的服务器信息
	 * @param token
	 * @return
	 */
	List<EsServer> queryServerInfo(String token);
	
	/**
	 * 通过Token查询项目名称
	 * @param token
	 * @return
	 */
	String queryServerName(String token);
	
	/**
	 * 通过Token和Mac查询服务器使用率%圖表
	 * @param serverInfoDTO
	 * @return
	 */
	List<EsSoftPercent> queryServerPercent(ServerInfoDTO serverInfoDTO,String userId);

	/**
	 * 通过项目ID查询项目Token
	 * @param projectId
	 * @return
	 */
	String getProjectTokenById(String projectId);
	
	/**
	 * 查询启用和用户自定义首页的项目信息
	 * @param userId
	 * @return
	 */
	List<CompanySelectVO> queryProjectByCustom(String userId);
	
	/**
	 * 查询用户自定义项目
	 * @param userId
	 * @return
	 */
	List<CompanySelectVO> queryCustomByUserId(String userId);
	
	/**
	 * 查询用户没有自定义的项目
	 * @param userId
	 * @return
	 */
	List<CompanySelectVO> queryNoCustom(String userId,String [] ids);
	
	/**
	 * @param rows 
	 * @param start 
	 * 通过Mac查询服务器历史信息
	 * @Title: EsServerHistory   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param serverMac
	 * @param: @param userId
	 * @param: @return      
	 * @return: PageVO<EsServerHistory>      
	 * @throws
	 */
	PageVO<EsServerHistory> EsServerHistory(String serverMac, String userId, String start, String rows);
	
	/**
	 * 查询最近的ES服务器软件信息
	 * @Title: queryEsSoftwareInfo   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @return      
	 * @return: PageVO<EsSofts>      
	 * @throws
	 */
	PageVO<EsSofts> queryEsSoftwareInfo(EsServerSoftWareDTO serverSoftWareDTO);
	
	/**
	 * 查询所有的项目服务器ES信息并导出Execl
	 * @return
	 */
	ResponseEntity<byte[]> queryAllServerInfo();
	
	/**
	 * 通过项目ID查询项目名称
	 * @Title: getNameByProjectId   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param peojectId
	 * @param: @return      
	 * @throws
	 */
	String getNameByProjectId(String peojectId);
	
}
